pub fn dp_rec_mc(amount: u32) -> u32 {
    // TODO: 这里写逻辑
    // 定义可用的纸币种类
    let coins = [1, 2, 5, 10, 20, 30, 50, 100];
    
    // 创建一个数组来存储每个金额的最小纸币数
    let mut dp = vec![u32::MAX; (amount + 1) as usize];
    dp[0] = 0; // 零金额需要零张纸币

    // 动态规划填充 dp 数组
    for coin in &coins {
        for i in *coin..=amount {
            if dp[(i - *coin) as usize] != u32::MAX {
                dp[i as usize] = dp[i as usize].min(dp[(i - *coin) as usize] + 1);
            }
        }
    }

    // 返回所需的最小纸币数，如果找不到合适的组合则返回 0
    if dp[amount as usize] == u32::MAX {
        0
    } else {
        dp[amount as usize]
    }
}
